<!doctype html>
<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
  <head>
    <title>property changes</title>
    <script src="../../../webcomponentsjs/webcomponents.js"></script>
    <link rel="import" href="../../polymer.html">
    <script src="../../../tools/test/htmltest.js"></script>
    <script src="../../../tools/test/chai/chai.js"></script>
  </head>
  <body>
    <x-test id="test"></x-test>

    <polymer-element name="x-test">
      <template>
      </template>
      <script>
        (function() {
          var changes = 0;
          var doneChanges = 3;
          function checkDone() {
            if (doneChanges == ++changes) {
              done();
            }
          }
          
          Polymer('x-test', {
            bar: '',
            attributeChangedCount: 0,
            ready: function() {
              this.attribute = 'foo';
              this.deliverChanges();
              chai.assert.equal(this.attributeChangedCount, 0, 'attributeChanged does not observe property attribute');
              this.setAttribute('nog', 'nog');
              this.bar = 'bar';
              setTimeout(function() {
                this.zonk = 'zonk';
              }.bind(this));
            },
            barChanged: function() {
              chai.assert.equal(this.bar, 'bar', 'change in ready calls *Changed');
              checkDone();
            },
            zonkChanged: function() {
              chai.assert.equal(this.zonk, 'zonk', 'change calls *Changed without prototype value')
              checkDone();
            },
            attributeChanged: function() {
              this.attributeChangedCount++;
              chai.assert.equal(this.getAttribute('nog'), 'nog', 'attributeChanged called in response to an attribute value changing')
              checkDone();
            }
          });
        })();
      </script>
    </polymer-element>
  </body>
</html>
